package org.dromara.system.domain.claim.bo;

import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.system.domain.claim.ClaimMain;

/**
 * 理赔主业务对象 claim_main
 *
 * @author zj
 * @date 2025-11-16
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = ClaimMain.class, reverseConvertGenerate = false)
public class ClaimMainBo extends BaseEntity {

    /**
     * 自增主键
     */
    @NotNull(message = "自增主键不能为空", groups = { EditGroup.class })
    private Long id;

    /**
     * 案件号
     */
    @NotBlank(message = "案件号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String claimId;

    /**
     * 业务来源
     */
    private String businessSource;

    /**
     * 京东报案号
     */
    private String jdReportId;

    /**
     * 报案时间
     */
    private String reportTime;

    /**
     * 出险时间
     */
    private String occurrenceTime;

    /**
     * 结案时间
     */
    private String closeTime;

    /**
     * 报案方式
     */
    private String reportMethod;

    /**
     * 履约类型
     */
    private String performanceType;

    /**
     * 物损程度
     */
    private String damageDegree;

    /**
     * 一级原因
     */
    private String firstLevelReason;

    /**
     * 二级原因
     */
    private String secondLevelReason;

    /**
     * 报案人
     */
    private String reporter;

    /**
     * 报案人电话
     */
    private String reporterPhone;

    /**
     * 寄件人
     */
    private String sender;

    /**
     * 寄件人电话
     */
    private String senderPhone;

    /**
     * 寄件地址
     */
    private String senderAddress;

    /**
     * 赔付方式
     */
    private String paymentMethod;

    /**
     * 保单号（批量查询）
     */
    private String policyId;

    /**
     * 保单起期
     */
    private String policyStartTime;

    /**
     * 保单止期
     */
    private String policyEndTime;

    /**
     * 延保订单号
     */
    private String extendedWarrantyOrderId;

    /**
     * 商家ID
     */
    private String merchantId;

    /**
     * 店铺ID
     */
    private String shopId;

    /**
     * 店铺名称
     */
    private String shopName;

    /**
     * 险种名称
     */
    private String insuranceName;

    /**
     * 主商品订单号（批量查询）
     */
    private String mainOrderId;

    /**
     * 主商品下单时间
     */
    private String mainOrderCreateTime;

    /**
     * 主商品出库时间
     */
    private String mainOrderOutboundTime;

    /**
     * 主商品完成时间
     */
    private String mainOrderCompleteTime;

    /**
     * 主商品名称
     */
    private String mainCommodityName;

    /**
     * 主商品SKU
     */
    private String mainCommoditySku;

    /**
     * 主商品IMEI设备标识
     */
    private String mainCommodityImei;

    /**
     * 主商品品牌
     */
    private String brand;

    /**
     * 主商品型号
     */
    private String model;

    /**
     * 主商品一级类目
     */
    private String firstCategoryName;

    /**
     * 主商品二级类目
     */
    private String secondCategoryName;

    /**
     * 主商品三级类目
     */
    private String thirdCategoryName;

    /**
     * 险种编码
     */
    private String insuranceCode;

    /**
     * 险种编码名称
     */
    private String insuranceCodeName;

    /**
     * 评星
     */
    private String rating;

    /**
     * 结案类型
     */
    private String closeType;

    /**
     * 交付商名称
     */
    private String repairerName;

    /**
     * 门店名称
     */
    private String storeName;

    /**
     * 派单时间
     */
    private String dispatchTime;

    /**
     * 接单时间
     */
    private String acceptTime;

    /**
     * 客户寄送时间
     */
    private String customerSendTime;

    /**
     * 快递单号
     */
    private String expressNo;

    /**
     * 接机时间
     */
    private String receiveMachineTime;

    /**
     * 方案提交时间
     */
    private String planSubmitTime;

    /**
     * 履约完成时间
     */
    private String performanceCompleteTime;

    /**
     * 采购渠道
     */
    private String procurementChannel;

    /**
     * 新机订单号
     */
    private String newMachineOrderId;

    /**
     * 归档时间
     */
    private String fileTime;

    /**
     * 结案状态
     */
    private String closeStatus;

    /**
     * 残值是否回收
     */
    private String isResidualRecovered;

    /**
     * 赔款是否支付
     */
    private String isClaimPaid;

    /**
     * 残值是否拍卖
     */
    private String isResidualAuctioned;

    /**
     * 最终赔付金额（系统自动计算）
     */
    private String finalPaymentAmount;

    /**
     * 报案日期（分区键）
     */
    @NotNull(message = "报案日期（分区键）不能为空", groups = { EditGroup.class })
    private Date reportDate;


}
